home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / FreshBar / Source / FreshLocale.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-25  |  3.0 KB  |  132 lines

  1. //*************************************************************************//
  2. // Filename:    FreshLocale.cpp
  3. // Autor:       Christian Taulien of Strange Intelligence
  4. // Purpose:     common localizing Localizing FRESH-Software by SI
  5. // Creation:    31. März 1998
  6. //*************************************************************************//
  7.  
  8. #include "global.h"
  9. #include "FreshLocale.h"
  10.  
  11. #include <string.h>
  12.  
  13. #include <clib/locale_protos.h>
  14. #include <clib/utility_protos.h>
  15.  
  16. CatalogC *glob_poCatalog = NULL;
  17.  
  18. CatalogC::CatalogC(char *arg_sName, ULONG arg_ulVersion /*= NULL*/, struct Locale *arg_poLocale /*= NULL*/)
  19. /*S*/
  20.   TRACE("Entry");
  21.   m_poCatalog = NULL;
  22.   openCatalog(arg_sName, arg_poLocale,
  23.       OC_Version, arg_ulVersion,
  24.       TAG_DONE);
  25. }
  26. /*E*/
  27. CatalogC::CatalogC(char *arg_sName, struct Locale *arg_poLocale, ULONG arg_eTags ...)
  28. /*S*/
  29.   TRACE("Entry");
  30.   m_poCatalog = NULL;
  31.   openCatalog(arg_sName, arg_poLocale, (struct TagItem *) &arg_eTags);
  32. }
  33. /*E*/
  34. CatalogC::~CatalogC()
  35. /*S*/
  36. {
  37.   TRACE("Entry");
  38.   closeCatalog();
  39. }
  40. /*E*/
  41. BOOL CatalogC::openCatalog(char *arg_sName, struct Locale *arg_poLocale /*= NULL*/, struct TagItem *arg_poTagList /*= NULL*/)
  42. /*S*/
  43. {
  44.   TRACE("Entry");
  45.   // Schließen, wenn Katalog noch offen
  46.   closeCatalog();
  47.  
  48.   // einfach versuchen den catalog zu öffnen
  49.   m_poCatalog = OpenCatalogA(arg_poLocale, arg_sName, arg_poTagList);
  50. return isOpen();
  51. }
  52. /*E*/
  53. BOOL CatalogC::openCatalog(char *arg_sName, struct Locale *arg_poLocale, ULONG arg_eTags ...)
  54. /*S*/
  55. {
  56.   TRACE("Entry");
  57.   // rufe die richtige methode auf
  58. return openCatalog(arg_sName, arg_poLocale, (struct TagItem *) &arg_eTags);
  59. }
  60. /*E*/
  61. void CatalogC::closeCatalog()
  62. /*S*/
  63. {
  64.   TRACE("Entry");
  65.   // wenn Catalog überhaupt offen
  66.   if (m_poCatalog)
  67.   {
  68.     CloseCatalog(m_poCatalog);
  69.     m_poCatalog = NULL;
  70.   } // if
  71. }
  72. /*E*/
  73. char CatalogC::getShortCut(int arg_iStringNum)
  74. /*S*/
  75. {
  76.   TRACE("Entry");
  77.   char *sString = getString(arg_iStringNum);
  78.   char cShortCut = '\0';
  79.  
  80.   // wenn string gefunden
  81.   if (sString)
  82.   {
  83.     int iLen = strlen(sString);
  84.     for (int i=0; i<iLen; ++i)
  85.     {
  86.       // wenn underscore gefunden und noch min. ein zeichen danach
  87.       // vorhanden
  88.       if (sString[i] == '_' && (i < iLen-1))
  89.       {
  90.         // shortcut gefunden. Schleife verlassen
  91.         cShortCut = sString[i+1];
  92.         break;
  93.       } // if
  94.     } // for
  95.   } // if
  96.  
  97. return cShortCut;
  98. }
  99. /*E*/
  100. char CatalogC::getShortCutLowerCase(int arg_iStringNum)
  101. /*S*/
  102.   TRACE("Entry");
  103. return ToLower(getShortCut(arg_iStringNum));
  104. }
  105. /*E*/
  106. unsigned char *CatalogC::getString(int arg_iStringNum)
  107. /*S*/
  108. {
  109.   TRACE("Entry");
  110.   // wenn ungültiger string
  111.   if (!(SIFC_BETWEEN(arg_iStringNum, FIRST_POSSIBLE_TEXT, LAST_POSSIBLE_TEXT)
  112.      || SIFC_BETWEEN(arg_iStringNum, FIRST_POSSIBLE_ERROR, LAST_POSSIBLE_ERROR)))
  113.   {
  114.     arg_iStringNum = T_UNDEFINED;
  115.   } // if
  116.  
  117.   // wenn catalog offen
  118.   if (m_poCatalog)
  119.   {
  120.     return GetCatalogStr(m_poCatalog, arg_iStringNum, glob_asInternCatalog[arg_iStringNum]);
  121.   }
  122.   else
  123.   {
  124.     return glob_asInternCatalog[arg_iStringNum];
  125.   } // if
  126. }
  127. /*E*/
  128.  
  129.